Binary search in SORTED array (only)ΒΆ

Performance: O(log2(N))
def bin_search(A, N):

    # borders
    l_idx = 0
    r_idx = len(A) - 1
    iter = 0

    while l_idx <= r_idx:

        mid_idx = (l_idx + r_idx) // 2
        mid_val = A[mid_idx]

        if mid_val == N:
            return mid_idx, iter
        elif mid_val > N:
            r_idx = mid_idx - 1
        else:
            l_idx = mid_idx + 1
        iter += 1

    return -1, iter

# test

# Input: list, N:
#            <                   >
#     [--------------- * ----------------]
# l_idx              m_idx              * r_idx
#
# Method:
#   while l_idx <= r_idx
#       m_idx = (l_idx + r_idx) // 2
#       m_val = list[m_idx]

while True:
    in_str = input("Enter number from list {} or e[xit]: ".format(lst)).strip()
    if in_str != "e":
        number = int(in_str)
        idx, iter = bin_search(lst, number)
        if idx >= 0:
            print("Index for item {} is {} [{} iter]".format(number, idx, iter))
        else:
            print("Not found")
    else:
        break

Output:

Enter number from list [1, 2, 3, 6, 7, 9, 21, 33] or e[xit]: 21
Index for item 21 is 6 [2 iter]

Enter number from list [1, 2, 3, 6, 7, 9, 21, 33] or e[xit]:  22
Not found

Enter number from list [1, 2, 3, 6, 7, 9, 21, 33] or e[xit]:  1
Index for item 1 is 0 [2 iter]

Enter number from list [1, 2, 3, 6, 7, 9, 21, 33] or e[xit]:  2
Index for item 2 is 1 [1 iter]

Enter number from list [1, 2, 3, 6, 7, 9, 21, 33] or e[xit]: e